package marketplace.web.beans;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import marketplace.ejb.interfaces.IUsuarioEJB;
import marketplace.ejb.interfaces.IVentaEJB;
import marketplace.jpa.datas.DataAdministrador;
import marketplace.jpa.datas.DataReclamo;
import marketplace.jpa.datas.DataRegistroAcceso;
import marketplace.web.utils.UtilsBean;

import org.primefaces.event.RowEditEvent;

@ManagedBean
@SessionScoped
public class AdministradorBean {

	@EJB
	IUsuarioEJB admEjb;

	@EJB
	IVentaEJB venta;
	
	private String rx;
	private String ry;
	private String nick;
	private String nomCompleto;
	private String apellido;
	private String mail;
	private String password;
	private Date fechaNto;
	private String movil;
	private char sexo;
	DataModel<DataRegistroAcceso> registrosmodel;
	private List<DataAdministrador> administradores;
	DataModel<DataReclamo> reclamosmodel;
	

	/////////////////////// CONSTRUCTOR ///////////////////////	
	
	
	
	public void setRegistrosmodel(DataModel<DataRegistroAcceso> registrosmodel) {
		this.registrosmodel = registrosmodel;
	}
	
	//Obteniendo los clientes para listarlos
	public DataModel<DataRegistroAcceso> getRegistrosModel() throws Exception{
		registrosmodel = new ListDataModel<DataRegistroAcceso>(admEjb.getRegistrosAcceso());
		return registrosmodel;	
	}
	
	
	public void setReclamosModel(DataModel<DataReclamo> reclamosmodel) {
		this.reclamosmodel = reclamosmodel;
	}
	
	public DataModel<DataReclamo> getReclamosModel() throws Exception{
		reclamosmodel = new ListDataModel<DataReclamo>(venta.getReclamos());
		return reclamosmodel;	
	}
	public AdministradorBean() {}


	@PostConstruct
    private void cargarAdministradores() {
    	try {
			setAdministradores(admEjb.getAdministradores());
		} catch (Exception e) {
			System.out.println("Funcion cargarAdministradores: " + e.getMessage());
		}  
    } 	
	
	/////////////////////// GETERS & SETERS ///////////////////////	

	

	public String getNick() { return nick; }
	public void setNick(String nick) { this.nick = nick; }		

	public String getNomCompleto() {return nomCompleto;}
	public void setNomCompleto(String nomCompleto) {this.nomCompleto = nomCompleto;}
	
	public String getMail() {return mail;}	
	public void setMail(String mail) {this.mail = mail;}
	
	public String getPassword() {return password;}	
	public void setPassword(String password) {this.password = password;}
	
	public Date getFechaNto() { return fechaNto; }
	public void setFechaNto(Date fechaNto) { this.fechaNto = fechaNto; }
	
	public String getMovil() { return movil; }
	public void setMovil(String movil) { this.movil = movil; }

	public char getSexo() { return sexo; }
	public void setSexo(char sexo) { this.sexo = sexo; }
	
	public List<DataAdministrador> getAdministradores(){ return administradores; }  	
	public void setAdministradores(List<DataAdministrador> administradores) { this.administradores = administradores; }
	

	//////////////////////////////// OPERACIONES ///////////////////////////////////	

	//GET REGISTRAR
	public void getRegistroAdministrador() throws Exception{
		FacesContext.getCurrentInstance().getExternalContext().redirect("adminRegistro.xhtml");
	}
	
	//POST REGISTRAR
	public void postRegistroAdministrador(ActionEvent actionEvent){	
		String pass = null;
		UtilsBean ub = new UtilsBean();
		try {
			pass = ub.cryptMD5(getPassword());
			if(getNick().isEmpty())
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Ingrese su nick",""));
			else if(getNomCompleto().isEmpty())
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Ingrese su nombre",""));
			else if(getMail().isEmpty())
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Ingrese su correo",""));
			else if(!ub.ValidarMail(mail))
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"El correo ingresado no es valido",""));
			else if (!admEjb.existeAdministrador(getMail(), pass)) {
				
				SimpleDateFormat f = new SimpleDateFormat("dd/MM/yy");
		 		String fechaString = f.format(getFechaNto());
		 		
		 		new UtilsBean().renombrarLogo(getMail());
				
				admEjb.guardarAdministrador(getNick(), getNomCompleto(), getMail(), getApellido(), pass, fechaString, getMovil(), getSexo());
				
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Se ha registrado", getNomCompleto() + "!, correctamente"));
				FacesContext.getCurrentInstance().getExternalContext().redirect("/MarketWEB/admin/adminListar.xhtml");
			}else{
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"ERROR en el Registro: El mail, ya existe",""));
			}
		} catch (Exception e) {
			System.out.println("ERROR postRegistrarAdministrador: " + e.getMessage());;
		}
	}	

	//GET MODIFICAR
	public void getModificarAdministrador(String mail) throws Exception{
		
		DataAdministrador adm = admEjb.obtenerAdministrador(mail);
		
		setMail(adm.getMail());
		setNick(adm.getNick());
		setNomCompleto(adm.getNomCompleto());
		setApellido(adm.getApellido());
		
		SimpleDateFormat f = new SimpleDateFormat("dd/MM/yy");
		@SuppressWarnings("deprecation")
		Date fecha = new Date(adm.getFechaNto());
		f.format(fecha);

		setFechaNto(fecha);
		setSexo(adm.getSexo());
		setMovil(adm.getMovil());
		
		FacesContext.getCurrentInstance().getExternalContext().redirect("adminModificar.xhtml");
	}
	
	
    //POST MODIFICAR
	
    public void postModificarAdministrador() {
		
		SimpleDateFormat f = new SimpleDateFormat("dd/MM/yy");
 		String fechaString = f.format(getFechaNto());				
 		new UtilsBean().renombrarLogo(getMail());
	    DataAdministrador adminWeb = new DataAdministrador(getNick(), getMail(), getNomCompleto(), getApellido(), getPassword(), fechaString, getMovil(), getSexo());
	    
		try {
			admEjb.modificarAdministrador(adminWeb);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Se ha modificado el administrador: ", adminWeb.getMail() + " !,  correctamente"));
			FacesContext.getCurrentInstance().getExternalContext().redirect("index.xhtml");
		} catch (Exception e) {
			System.out.println("ERROR postModificarAdministrador: " + e.getMessage());
		}
		
    } 	
	
    public void onEditAdministrador(RowEditEvent event) {
	    DataAdministrador adminWeb = ((DataAdministrador) event.getObject());
		try {
			admEjb.modificarAdministrador(adminWeb);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Se ha modificado el administrador: ", adminWeb.getMail() + " !,  correctamente"));
		} catch (Exception e) {
			System.out.println("ERROR onEditAdministrador: " + e.getMessage());
		}
    }  

    
    
    public void onCancelAdministrador(RowEditEvent event) {  
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Operacion cancelada para: ", ((DataAdministrador) event.getObject()).getMail()));  
    }
    
	//ELIMINAR
	public void postEliminarAdministrador(String mail){
		try {
			admEjb.eliminarAdministrador(mail);
			cargarAdministradores();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Se ha eliminado", mail + "!, correctamente"));			
		} catch (Exception e) {
			System.out.println("ERROR postEliminarAdministrador: " + mail);
		}
	}	
	
	//LISTAR
	public void getListarAdministrador() throws Exception{
		FacesContext.getCurrentInstance().getExternalContext().redirect("adminListar.xhtml");
	}

	public String getRegistrosAccesoX() throws Exception{
		return admEjb.getRegistrosAccesoX();
		
	}

	public String getRegistrosAccesoY() throws Exception{
		return admEjb.getRegistrosAccesoY();
		
	}

	public String getRx() throws Exception{
		rx = admEjb.getRegistrosAccesoX();
		return rx;
	}
			
	public void setRx(String rx) {
		this.rx = rx;
	}

	public String getRy() throws Exception {
		ry = admEjb.getRegistrosAccesoY();
		return ry;
	}

	public void setRy(String ry) {
		this.ry = ry;
	}

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
	
	
	
}
